package fyzh.mongoservice

import com.fyzh.entity.MongodbTest
import grails.converters.JSON
import org.springframework.data.mongodb.core.MongoTemplate
import org.springframework.data.mongodb.core.query.Criteria
import org.springframework.data.mongodb.core.query.Query
import org.springframework.data.mongodb.core.query.Update

class MongoTestController {
    MongoTemplate mongoTemplate
    def index() { }


    /**
     * 新增
     * @return
     */
    def save() {
        MongodbTest mongodbTest=new MongodbTest()
        mongodbTest.setName("test")
        mongodbTest.setCode("code123")
        mongoTemplate.save(mongodbTest)
        render "success"
    }
    /**
     * 也可以存储map，向指定的集合中存储，字段类型不必一一对应
     * @return
     */
    def saveMap(){
        Map map=new HashMap()
        map.put("nameMap","map123")
        map.put("codeMap","code456")
        mongoTemplate.save(map,"mongodbTest")//第二个参数是集合名称
        render "success"
    }
    /**
     * 根据多个条件查询
     * @return
     */
    def find() {
        Criteria criteria= new Criteria()
        criteria.andOperator(Criteria.where("name").is("test"),Criteria.where("code").is("code123"))
        Query q=new Query()
        long totalCount = this.mongoTemplate.count(q,MongodbTest.class)//获取总条数
        q.addCriteria(criteria)
        q.skip(0)// skip相当于从那条记录开始
        q.limit(20)//从skip开始,取多少条记录
        render mongoTemplate.find(q,MongodbTest.class) as JSON        //两种查询方式
        // render mongoTemplate.find(q,Map.class,"mongodbTest") as JSON //两种查询方式
    }
    /**
     * 查询所有数据
     * @return
     */
    def findAll() {
        render mongoTemplate.findAll(MongodbTest.class) as JSON    //两种查询方式
        // render mongoTemplate.find(new Query(),Map.class,"mongodbTest") as JSON //两种查询方式
    }

    /**
     * 修改
     * @return
     */
    def update() {
        Criteria criteria= new Criteria()
        criteria.andOperator(Criteria.where("name").is("test"),Criteria.where("code").is("code123"))
        Query q=new Query()
        q.addCriteria(criteria)

        Update up=new Update()
        up.set("name","jyd")
        render mongoTemplate.updateMulti(q,up,MongodbTest.class) as JSON
    }
    /**
     * 根据条件删除
     * @return
     */
    def remove() {
        Criteria criteria= new Criteria()
        criteria.andOperator(Criteria.where("name").is("test"))
        Query q=new Query()
        q.addCriteria(criteria)
        render mongoTemplate.remove(q,MongodbTest.class) as JSON
    }
}
